﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Comm.PublicClass;
using System.Reflection;
using Wasion.HHU.Data.Repositories;

namespace WsProtocol.IEC62056MDL
{
    public class TMeterTypeRole
    {
        public static ProtocolDbRepository protocolDbRepository = new ProtocolDbRepository();
        private static string tablename = "T_MeterTypeRole";
        //private static EasyDb nowdb = null;  //数据库操作类
        public string ID { get; set; }
        public string MtypeID { get; set; }
        public string RoleName { get; set; }
        public string RoleClientAddr { get; set; }
        public string ICOBIS { get; set; }  //帧计数器对应的OBIS
        public string LNOBIS { get; set; } //建连接所用OBIS
        public string Descs { get; set; }
        public static List<TMeterTypeRole> MtypeRolelst = new List<TMeterTypeRole>();

        public string RoleAuth { get; set; }

        public TMeterTypeRole()
        {
            RoleClientAddr = "1";
            ICOBIS = PtlConsts.UkeyFCOBIS;
            LNOBIS = PtlConsts.AssLNOBIS;
        }

        /// <summary>
        /// 复制自身
        /// </summary>
        /// <param name="copyid">是否连ID也一起复制</param>
        /// <returns></returns>
        public TMeterTypeRole Copy(bool copyid)
        {
            //新建一个
            TMeterTypeRole newrole = new TMeterTypeRole();

            //复制属性
            PropertyInfo[] fromFields = typeof(TMeterTypeRole).GetProperties();
            PubFunction.SetProperties(fromFields, this, newrole);

            if (!copyid)
                newrole.ID = string.Empty;

            return newrole;
        }

        public void Dispose()
        {
            MtypeRolelst.Remove(this);

            GC.SuppressFinalize(this);
        }



        //public static void TableToList(DataTable dt)
        //{
        //    MtypeRolelst.Clear();
        //    if (dt == null)
        //        return;
        //    TMeterTypeRole m = null;
        //    foreach (DataRow dr in dt.Rows)
        //    {

        //        m = new TMeterTypeRole();
        //        m.ID = MyConvert.getString(dr["ID"]);
        //        m.MtypeID = MyConvert.getString(dr["MtypeID"]);
        //        m.RoleName = MyConvert.getString(dr["RoleName"]);
        //        m.RoleClientAddr = MyConvert.getString(dr["RoleClientAddr"]);

        //        try
        //        {
        //            m.ICOBIS = MyConvert.getString(dr["ICOBIS"]);
        //            if (string.IsNullOrEmpty(m.ICOBIS))
        //                m.ICOBIS = PtlConsts.UkeyFCOBIS;
        //        }
        //        catch
        //        { }

        //        try
        //        {
        //            m.LNOBIS = MyConvert.getString(dr["LNOBIS"]);
        //            if (string.IsNullOrEmpty(m.LNOBIS))
        //                m.LNOBIS = PtlConsts.AssLNOBIS;
        //        }
        //        catch
        //        { }

        //        m.Descs = MyConvert.getString(dr["Descs"]);
        //        MtypeRolelst.Add(m);
        //    }

        //}

        public static List<TMeterTypeRole> GetAllMeterTypeRole()
        {
            //if (nowdb == null)
            //nowdb = PtlConsts.easyDb;
            //nowdb.Clear();
            //nowdb.TableName = tablename;
            //nowdb.SetOrder("MtypeID,RoleClientAddr");
            //TableToList(nowdb.Select());

            var list = protocolDbRepository.GetAllMeterTypeRole().Result;

            foreach (var item in list)
            {
                var m = new TMeterTypeRole();
                m.ID = item.ID;
                m.MtypeID = item.MtypeID;
                m.RoleName = item.RoleName;
                m.RoleClientAddr = item.RoleClientAddr;
                m.ICOBIS = item.ICOBIS;
                m.LNOBIS = item.LNOBIS;
                m.Descs = item.Descs;

                MtypeRolelst.Add(m);
            }

            return MtypeRolelst;
        }

        //public static List<TMeterTypeRole> GetTypeRoleByTID(string MTypeID)
        //{
        //    // if (MtypeRolelst == null || MtypeRolelst.Count == 0)
        //    GetAllMeterTypeRole();

        //    List<TMeterTypeRole> roleLst = new List<TMeterTypeRole>();

        //    foreach (TMeterTypeRole Role in MtypeRolelst)
        //    {
        //        if (!string.IsNullOrEmpty(MTypeID))
        //        {
        //            if (Role.MtypeID == MTypeID)
        //                roleLst.Add(Role);
        //        }
        //        else
        //            roleLst.Add(Role);
        //    }
        //    if (roleLst.Count == 0)
        //    {
        //        foreach (DefRoleAddr Erole in Enum.GetValues(typeof(DefRoleAddr)))
        //        {
        //            TMeterTypeRole role = new TMeterTypeRole();
        //            role.RoleName = Erole.ToString();
        //            role.RoleClientAddr = ((int)Erole).ToString();
        //            role.RoleAuth = "03";
        //            roleLst.Add(role);
        //        }

        //    }
        //    return roleLst;
        //}


        //public static int SaveMtypeRoleLst(string Mtypeid, List<TMeterTypeRole> RoleLst, ref string errinfo)
        //{

        //    int rs = DeleteMeterRoleByMTID(Mtypeid, ref errinfo);
        //    if (RoleLst == null || RoleLst.Count == 0)
        //        return 1;
        //    for (int i = 0; i < RoleLst.Count; i++)
        //    {
        //        rs = RoleLst[i].SaveMeterRole(Mtypeid, ref errinfo);
        //        if (rs < 0)
        //        {
        //            errinfo += RoleLst[i].RoleName + "保存失败";
        //            return rs;
        //        }
        //    }
        //    return rs;
        //}
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="errinfo"></param>
        /// <returns></returns>
        //public int SaveMeterRole(string Mtypeid, ref string errinfo)
        //{
        //    //if (CheckRepeat())
        //    //{
        //    //    errinfo = "此角色对应的客户端地址已存在";
        //    //    return -1;
        //    //}
        //    if (string.IsNullOrEmpty(MtypeID))
        //        MtypeID = Mtypeid;
        //    nowdb.Clear();
        //    nowdb.TableName = tablename;
        //    nowdb.SetFieldValue("MtypeID", MtypeID, EasyDataType.String);
        //    nowdb.SetFieldValue("RoleName", RoleName, EasyDataType.String);
        //    nowdb.SetFieldValue("RoleClientAddr", RoleClientAddr, EasyDataType.String);
        //    nowdb.SetFieldValue("ICOBIS", ICOBIS, EasyDataType.String);
        //    nowdb.SetFieldValue("LNOBIS", LNOBIS, EasyDataType.String);
        //    nowdb.SetFieldValue("Descs", Descs, EasyDataType.String);
        //    if (string.IsNullOrEmpty(ID))
        //        ID = Guid.NewGuid().ToString();

        //    //if (!string.IsNullOrEmpty(ID))  //修改的
        //    //{
        //    //    nowdb.SetWhereParameter(true, "ID", "=", ID, EasyDataType.String);
        //    //    return nowdb.Update(ref errinfo);
        //    //}
        //    //else
        //    //{

        //    //  ID = Guid.NewGuid().ToString();
        //    nowdb.SetFieldValue("ID", ID, EasyDataType.String);
        //    int rs = nowdb.Insert(ref errinfo);
        //    if (rs > 0)
        //        MtypeRolelst.Add(this);
        //    else
        //    {
        //        nowdb.SetWhereParameter(true, "ID", "=", ID, EasyDataType.String);
        //        rs = nowdb.Update(ref errinfo);
        //    }
        //    return rs;

        //}

        //删除
        //public int DeleteMeterRole(ref string errinfo)
        //{
        //    if (string.IsNullOrEmpty(ID))
        //        return 1;
        //    nowdb.Clear();
        //    nowdb.TableName = tablename;
        //    nowdb.SetWhereParameter(true, "ID", "=", ID, EasyDataType.String);
        //    int rs = nowdb.Delete(ref errinfo);
        //    if (rs > 0)
        //    {
        //        this.Dispose();
        //    }

        //    return rs;
        //}

        //删除
        //public static int DeleteMeterRoleByMTID(string MtypeID, ref string errinfo)
        //{
        //    if (string.IsNullOrEmpty(MtypeID))
        //        return 1;
        //    nowdb.Clear();
        //    nowdb.TableName = tablename;
        //    nowdb.SetWhereParameter(true, "MtypeID", "=", MtypeID, EasyDataType.String);
        //    int rs = nowdb.Delete(ref errinfo);
        //    if (rs > 0)
        //    {
        //        MtypeRolelst.RemoveAll(it => it.MtypeID == MtypeID);
        //    }
        //    return rs;
        //}



        /// <summary>
        /// 检查是否有重名的客户端地址
        /// </summary>
        /// <returns></returns>
        //public bool CheckRepeat()
        //{
        //    bool rs = false;
        //    if (MtypeRolelst == null || MtypeRolelst.Count == 0)
        //        GetAllMeterTypeRole();
        //    for (int i = 0; i < MtypeRolelst.Count; i++)
        //    {
        //        if (MtypeRolelst[i].MtypeID == this.MtypeID &&
        //            MtypeRolelst[i].ID != this.ID &&
        //            MtypeRolelst[i].RoleClientAddr == this.RoleClientAddr)
        //        {
        //            rs = true;
        //            break;
        //        }
        //    }
        //    return rs;
        //}

        /// <summary>
        /// 根据客户端地址找到角色对象
        /// </summary>
        /// <returns></returns>
        public static TMeterTypeRole GetRoleByCAddr(string caddr, List<TMeterTypeRole> RoleLst)
        {
            TMeterTypeRole Role = new TMeterTypeRole();

            if (RoleLst == null || RoleLst.Count == 0)
                RoleLst = GetAllMeterTypeRole();

            for (int i = 0; i < RoleLst.Count; i++)
            {
                if (int.Parse(RoleLst[i].RoleClientAddr) == int.Parse(caddr))
                {
                    Role = RoleLst[i];
                    break;
                }
            }
            Role.RoleClientAddr = caddr;
            return Role;
        }
    }
}
